package com.yystar.support.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.io.Writer;

/**
 * 文件操作类
 * @author liuzhifei
 *
 */
public abstract class FileUtility {

    /**
     * 将指定内容写入到指定的文件里,UTF-8写入<br>
     * 目录不存在则自动创建<br>
     * 默认是覆盖,不追加
     * @param file 需要写入的文件
     * @param s 需要写入的内容
     * @throws IOException
     */
    public static void write(File file, String s) throws IOException {
        write(file, s, false);
    }
    
    /**
     * 将指定的内容写入到指定的文件里,UTF-8写入<br>
     * 目录不存在则自动创建
     * @param file 需要写入的文件
     * @param s 需要写入的内容
     * @param append true 为 追加， false 为覆盖
     * @throws IOException
     */
    public static void write(File file, String s, boolean append) throws IOException{

        if (s == null) {
            return;
        }

        if (file.getParent() != null) {
            mkdirs(file.getParent());
        }

        Writer writer = new OutputStreamWriter(
            new FileOutputStream(file, append), "UTF-8");

        writer.write(s);

        writer.close();
    }
    
    /**
     * 读取指定文件的内容<br>
     * UTF-8格式读取文件
     * @param file 需要读取的文件
     * @return 返回指定文件里的内容
     * @throws IOException
     */
    public static String read(File file) throws IOException{
        
        byte[] bytes = getBytes(file);

        if (bytes == null) {
            return null;
        }

        return new String(bytes, "UTF-8");
    }
    
    /**
     * 读取指定文件的内容
     * @param file 需要读取的文件
     * @return 已字节数组返回文件里的内容
     * @throws IOException
     */
    public static byte[] getBytes(File file) throws IOException {
        if ((file == null) || !file.exists()) {
            return null;
        }

        RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");

        byte[] bytes = new byte[(int)randomAccessFile.length()];

        randomAccessFile.readFully(bytes);

        randomAccessFile.close();

        return bytes;
    }
    
    /**
     * 创建此抽象路径名指定的目录，包括所有必需但不存在的父目录。注意，此操作失败时也可能已经成功地创建了一部分必需的父目录。
     * @param pathName 需要创建的抽象路径
     */
    public static void mkdirs(String pathName) {
        File file = new File(pathName);

        file.mkdirs();
    }
}
